package com.thread.other;

//自管理的Runnable
public class SelfMAnaged implements Runnable {

	private int countDown = 5;
	private Thread t = new Thread(this);

	public SelfMAnaged() {
		// start方法在构造方法里调用是有问题的，因为另一个任务可能在构造器结束前开始执行，这意味着该任务能够访问处于不稳定状态的对象，
		// 这是优先选Executor而不是显式地创建Thread对象的另一个原因
		t.start();
	}

	public String toString() {
		return Thread.currentThread().getName() + "(" + countDown + ")";
	}

	@Override
	public void run() {
		while (true) {
			System.out.print(this + ",");
			if (--countDown == 0) {
				return;
			}
		}
	}

	public static void main(String[] args) {
		for (int i = 0; i < 5; i++) {
			new SelfMAnaged();
		}
	}

}
